#pragma warning( disable : 4290 )

#include <istream>
#include <ostream>
#ifndef __SmartObject_class__h
#define __SmartObject_class__h
#define SmartObject_Type_Information(a) virtual const char* type() const{ return a; }

class SmartObject
{
public:
	unsigned int _count;//Do NOT TOUCH.
	SmartObject():_count(0) {}
	virtual ~SmartObject(){}
	virtual const char* type() const = 0;
	//handy. plus, we don't want people to instantiate a plain-old SmartObject. :P
	//does nothing, by default. must be implemented by inheritants:
	virtual void LoadFromFile( std::istream& ){};
	virtual void ExportToFile( std::ostream& ){};
	static unsigned int gBufferSize;// controlled method of implementing a buffer.
	//DO NOT CALL THESE UNLESS YOU'RE SMART:
	//[ if you do, do so like a stack. ]
	//[ 1 push = 1 pop. etc ]
};
#endif